home *** CD-ROM | disk | FTP | other *** search
/ PC/CD Gamer UK 123 / CD Gamer Issue 123 (June 2003) (Disc 1).ISO / Games / Dev_Demo_EU / data1.cab / App_Executables / OpenAL / Inc / eax.h < prev    next >
Encoding:
C/C++ Source or Header  |  2003-02-28  |  21.2 KB  |  532 lines

  1. /*******************************************************************\
  2. *                                                                    *
  3. *  EAX.H - Environmental Audio Extensions version 3.0                *
  4. *          for OpenAL and DirectSound3D                                *
  5. *                                                                    *
  6. ********************************************************************/
  7.  
  8. #ifndef EAX_H_INCLUDED
  9. #define EAX_H_INCLUDED
  10.  
  11. #ifdef __cplusplus
  12. extern "C" {
  13. #endif // __cplusplus
  14.  
  15. #ifndef OPENAL
  16.     #include <dsound.h>
  17.  
  18.     /*
  19.      * EAX Wrapper Interface (using Direct X 7) {4FF53B81-1CE0-11d3-AAB8-00A0C95949D5}
  20.      */
  21.     DEFINE_GUID(CLSID_EAXDirectSound, 
  22.         0x4ff53b81, 
  23.         0x1ce0, 
  24.         0x11d3,
  25.         0xaa, 0xb8, 0x0, 0xa0, 0xc9, 0x59, 0x49, 0xd5);
  26.         
  27.    /*
  28.     * EAX Wrapper Interface (using Direct X 8) {CA503B60-B176-11d4-A094-D0C0BF3A560C}
  29.     */
  30.     DEFINE_GUID(CLSID_EAXDirectSound8, 
  31.         0xca503b60,
  32.         0xb176,
  33.         0x11d4,
  34.         0xa0, 0x94, 0xd0, 0xc0, 0xbf, 0x3a, 0x56, 0xc);
  35.  
  36.     
  37.  
  38. #ifdef DIRECTSOUND_VERSION        
  39. #if DIRECTSOUND_VERSION == 0x0800
  40.     __declspec(dllimport) HRESULT WINAPI EAXDirectSoundCreate8(GUID*, LPDIRECTSOUND8*, IUnknown FAR *);
  41.     typedef HRESULT (FAR PASCAL *LPEAXDIRECTSOUNDCREATE8)(GUID*, LPDIRECTSOUND8*, IUnknown FAR*);
  42. #endif
  43. #endif
  44.     
  45.     __declspec(dllimport) HRESULT WINAPI EAXDirectSoundCreate(GUID*, LPDIRECTSOUND*, IUnknown FAR *);
  46.     typedef HRESULT (FAR PASCAL *LPEAXDIRECTSOUNDCREATE)(GUID*, LPDIRECTSOUND*, IUnknown FAR*);
  47.  
  48. #else // OPENAL
  49.     //#include <al.h>
  50.     
  51.     #ifndef GUID_DEFINED
  52.         #define GUID_DEFINED
  53.         typedef struct _GUID
  54.         {
  55.             unsigned long Data1;
  56.             unsigned short Data2;
  57.             unsigned short Data3;
  58.             unsigned char Data4[8];
  59.         } GUID;
  60.     #endif // !GUID_DEFINED
  61.  
  62.     #ifndef DEFINE_GUID
  63.         #ifndef INITGUID
  64.             #define DEFINE_GUID(name, l, w1, w2, b1, b2, b3, b4, b5, b6, b7, b8) \
  65.                     extern const GUID /*FAR*/ name
  66.         #else
  67.             #define DEFINE_GUID(name, l, w1, w2, b1, b2, b3, b4, b5, b6, b7, b8) \
  68.                     extern const GUID name = { l, w1, w2, { b1, b2,  b3,  b4,  b5,  b6,  b7,  b8 } }
  69.         #endif // INITGUID
  70.     #endif // DEFINE_GUID
  71.     
  72.  
  73.     /*
  74.      * EAX OpenAL Extension
  75.      */
  76.     typedef ALenum (*EAXSet)(const GUID*, ALuint, ALuint, ALvoid*, ALuint);
  77.     typedef ALenum (*EAXGet)(const GUID*, ALuint, ALuint, ALvoid*, ALuint);
  78. #endif
  79.  
  80. #pragma pack(push, 4)
  81.  
  82. /*
  83.  * EAX 3.0 listener property set {A8FA6880-B476-11d3-BDB9-00C0F02DDF87}
  84.  */
  85. DEFINE_GUID(DSPROPSETID_EAX30_ListenerProperties, 
  86.     0xa8fa6882, 
  87.     0xb476, 
  88.     0x11d3, 
  89.     0xbd, 0xb9, 0x00, 0xc0, 0xf0, 0x2d, 0xdf, 0x87);
  90.  
  91. // For compatibility with future EAX versions:
  92. #define DSPROPSETID_EAX_ListenerProperties DSPROPSETID_EAX30_ListenerProperties
  93.  
  94. typedef enum
  95. {
  96.     DSPROPERTY_EAXLISTENER_NONE,
  97.     DSPROPERTY_EAXLISTENER_ALLPARAMETERS,
  98.     DSPROPERTY_EAXLISTENER_ENVIRONMENT,
  99.     DSPROPERTY_EAXLISTENER_ENVIRONMENTSIZE,
  100.     DSPROPERTY_EAXLISTENER_ENVIRONMENTDIFFUSION,
  101.     DSPROPERTY_EAXLISTENER_ROOM,
  102.     DSPROPERTY_EAXLISTENER_ROOMHF,
  103.     DSPROPERTY_EAXLISTENER_ROOMLF,
  104.     DSPROPERTY_EAXLISTENER_DECAYTIME,
  105.     DSPROPERTY_EAXLISTENER_DECAYHFRATIO,
  106.     DSPROPERTY_EAXLISTENER_DECAYLFRATIO,
  107.     DSPROPERTY_EAXLISTENER_REFLECTIONS,
  108.     DSPROPERTY_EAXLISTENER_REFLECTIONSDELAY,
  109.     DSPROPERTY_EAXLISTENER_REFLECTIONSPAN,
  110.     DSPROPERTY_EAXLISTENER_REVERB,
  111.     DSPROPERTY_EAXLISTENER_REVERBDELAY,
  112.     DSPROPERTY_EAXLISTENER_REVERBPAN,
  113.     DSPROPERTY_EAXLISTENER_ECHOTIME,
  114.     DSPROPERTY_EAXLISTENER_ECHODEPTH,
  115.     DSPROPERTY_EAXLISTENER_MODULATIONTIME,
  116.     DSPROPERTY_EAXLISTENER_MODULATIONDEPTH,
  117.     DSPROPERTY_EAXLISTENER_AIRABSORPTIONHF,
  118.     DSPROPERTY_EAXLISTENER_HFREFERENCE,
  119.     DSPROPERTY_EAXLISTENER_LFREFERENCE,
  120.     DSPROPERTY_EAXLISTENER_ROOMROLLOFFFACTOR,
  121.     DSPROPERTY_EAXLISTENER_FLAGS
  122. } DSPROPERTY_EAX_LISTENERPROPERTY;
  123.  
  124. // OR these flags with property id
  125. #define DSPROPERTY_EAXLISTENER_IMMEDIATE 0x00000000 // changes take effect immediately
  126. #define DSPROPERTY_EAXLISTENER_DEFERRED  0x80000000 // changes take effect later
  127. #define DSPROPERTY_EAXLISTENER_COMMITDEFERREDSETTINGS (DSPROPERTY_EAXLISTENER_NONE | \
  128.                                                        DSPROPERTY_EAXLISTENER_IMMEDIATE)
  129.  
  130. typedef struct _EAXVECTOR {
  131.     float x;
  132.     float y;
  133.     float z;
  134. } EAXVECTOR;
  135.  
  136. // Use this structure for DSPROPERTY_EAXLISTENER_ALLPARAMETERS
  137. // - all levels are hundredths of decibels
  138. // - all times and delays are in seconds
  139. //
  140. // NOTE: This structure may change in future EAX versions.
  141. //       It is recommended to initialize fields by name:
  142. //              myListener.lRoom = -1000;
  143. //              myListener.lRoomHF = -100;
  144. //              ...
  145. //              myListener.dwFlags = myFlags /* see EAXLISTENERFLAGS below */ ;
  146. //       instead of:
  147. //              myListener = { -1000, -100, ... , 0x00000009 };
  148. //       If you want to save and load presets in binary form, you 
  149. //       should define your own structure to insure future compatibility.
  150. //
  151. typedef struct _EAXLISTENERPROPERTIES
  152. {
  153.     unsigned long ulEnvironment;   // sets all listener properties
  154.     float flEnvironmentSize;       // environment size in meters
  155.     float flEnvironmentDiffusion;  // environment diffusion
  156.     long lRoom;                    // room effect level (at mid frequencies)
  157.     long lRoomHF;                  // relative room effect level at high frequencies
  158.     long lRoomLF;                  // relative room effect level at low frequencies  
  159.     float flDecayTime;             // reverberation decay time at mid frequencies
  160.     float flDecayHFRatio;          // high-frequency to mid-frequency decay time ratio
  161.     float flDecayLFRatio;          // low-frequency to mid-frequency decay time ratio   
  162.     long lReflections;             // early reflections level relative to room effect
  163.     float flReflectionsDelay;      // initial reflection delay time
  164.     EAXVECTOR vReflectionsPan;     // early reflections panning vector
  165.     long lReverb;                  // late reverberation level relative to room effect
  166.     float flReverbDelay;           // late reverberation delay time relative to initial reflection
  167.     EAXVECTOR vReverbPan;          // late reverberation panning vector
  168.     float flEchoTime;              // echo time
  169.     float flEchoDepth;             // echo depth
  170.     float flModulationTime;        // modulation time
  171.     float flModulationDepth;       // modulation depth
  172.     float flAirAbsorptionHF;       // change in level per meter at high frequencies
  173.     float flHFReference;           // reference high frequency
  174.     float flLFReference;           // reference low frequency 
  175.     float flRoomRolloffFactor;     // like DS3D flRolloffFactor but for room effect
  176.     unsigned long ulFlags;         // modifies the behavior of properties
  177. } EAXLISTENERPROPERTIES, *LPEAXLISTENERPROPERTIES;
  178.  
  179. // used by DSPROPERTY_EAXLISTENER_ENVIRONMENT
  180. enum
  181. {
  182.     EAX_ENVIRONMENT_GENERIC,
  183.     EAX_ENVIRONMENT_PADDEDCELL,
  184.     EAX_ENVIRONMENT_ROOM,
  185.     EAX_ENVIRONMENT_BATHROOM,
  186.     EAX_ENVIRONMENT_LIVINGROOM,
  187.     EAX_ENVIRONMENT_STONEROOM,
  188.     EAX_ENVIRONMENT_AUDITORIUM,
  189.     EAX_ENVIRONMENT_CONCERTHALL,
  190.     EAX_ENVIRONMENT_CAVE,
  191.     EAX_ENVIRONMENT_ARENA,
  192.     EAX_ENVIRONMENT_HANGAR,
  193.     EAX_ENVIRONMENT_CARPETEDHALLWAY,
  194.     EAX_ENVIRONMENT_HALLWAY,
  195.     EAX_ENVIRONMENT_STONECORRIDOR,
  196.     EAX_ENVIRONMENT_ALLEY,
  197.     EAX_ENVIRONMENT_FOREST,
  198.     EAX_ENVIRONMENT_CITY,
  199.     EAX_ENVIRONMENT_MOUNTAINS,
  200.     EAX_ENVIRONMENT_QUARRY,
  201.     EAX_ENVIRONMENT_PLAIN,
  202.     EAX_ENVIRONMENT_PARKINGLOT,
  203.     EAX_ENVIRONMENT_SEWERPIPE,
  204.     EAX_ENVIRONMENT_UNDERWATER,
  205.     EAX_ENVIRONMENT_DRUGGED,
  206.     EAX_ENVIRONMENT_DIZZY,
  207.     EAX_ENVIRONMENT_PSYCHOTIC,
  208.  
  209.     EAX_ENVIRONMENT_UNDEFINED,
  210.  
  211.     EAX_ENVIRONMENT_COUNT
  212. };
  213.  
  214. // Used by DSPROPERTY_EAXLISTENER_FLAGS
  215. //
  216. // Note: The number and order of flags may change in future EAX versions.
  217. //       It is recommended to use the flag defines as follows:
  218. //              myFlags = EAXLISTENERFLAGS_DECAYTIMESCALE | EAXLISTENERFLAGS_REVERBSCALE;
  219. //       instead of:
  220. //              myFlags = 0x00000009;
  221. //
  222. // These flags determine what properties are affected by environment size.
  223. #define EAXLISTENERFLAGS_DECAYTIMESCALE        0x00000001 // reverberation decay time
  224. #define EAXLISTENERFLAGS_REFLECTIONSSCALE      0x00000002 // reflection level
  225. #define EAXLISTENERFLAGS_REFLECTIONSDELAYSCALE 0x00000004 // initial reflection delay time
  226. #define EAXLISTENERFLAGS_REVERBSCALE           0x00000008 // reflections level
  227. #define EAXLISTENERFLAGS_REVERBDELAYSCALE      0x00000010 // late reverberation delay time
  228. #define EAXLISTENERFLAGS_ECHOTIMESCALE         0x00000040 // echo time
  229. #define EAXLISTENERFLAGS_MODULATIONTIMESCALE   0x00000080 // modulation time
  230.  
  231. // This flag limits high-frequency decay time according to air absorption.
  232. #define EAXLISTENERFLAGS_DECAYHFLIMIT          0x00000020
  233.  
  234. #define EAXLISTENERFLAGS_RESERVED              0xFFFFFF00 // reserved future use
  235.  
  236. // Property ranges and defaults:
  237.  
  238. #define EAXLISTENER_MINENVIRONMENT                0
  239. #define EAXLISTENER_MAXENVIRONMENT                (EAX_ENVIRONMENT_COUNT-1)
  240. #define EAXLISTENER_DEFAULTENVIRONMENT            EAX_ENVIRONMENT_GENERIC
  241.  
  242. #define EAXLISTENER_MINENVIRONMENTSIZE            1.0f
  243. #define EAXLISTENER_MAXENVIRONMENTSIZE            100.0f
  244. #define EAXLISTENER_DEFAULTENVIRONMENTSIZE        7.5f
  245.  
  246. #define EAXLISTENER_MINENVIRONMENTDIFFUSION       0.0f
  247. #define EAXLISTENER_MAXENVIRONMENTDIFFUSION       1.0f
  248. #define EAXLISTENER_DEFAULTENVIRONMENTDIFFUSION   1.0f
  249.  
  250. #define EAXLISTENER_MINROOM                       (-10000)
  251. #define EAXLISTENER_MAXROOM                       0
  252. #define EAXLISTENER_DEFAULTROOM                   (-1000)
  253.  
  254. #define EAXLISTENER_MINROOMHF                     (-10000)
  255. #define EAXLISTENER_MAXROOMHF                     0
  256. #define EAXLISTENER_DEFAULTROOMHF                 (-100)
  257.  
  258. #define EAXLISTENER_MINROOMLF                     (-10000)
  259. #define EAXLISTENER_MAXROOMLF                     0
  260. #define EAXLISTENER_DEFAULTROOMLF                 0
  261.  
  262. #define EAXLISTENER_MINDECAYTIME                  0.1f
  263. #define EAXLISTENER_MAXDECAYTIME                  20.0f
  264. #define EAXLISTENER_DEFAULTDECAYTIME              1.49f
  265.  
  266. #define EAXLISTENER_MINDECAYHFRATIO               0.1f
  267. #define EAXLISTENER_MAXDECAYHFRATIO               2.0f
  268. #define EAXLISTENER_DEFAULTDECAYHFRATIO           0.83f
  269.  
  270. #define EAXLISTENER_MINDECAYLFRATIO               0.1f
  271. #define EAXLISTENER_MAXDECAYLFRATIO               2.0f
  272. #define EAXLISTENER_DEFAULTDECAYLFRATIO           1.00f
  273.  
  274. #define EAXLISTENER_MINREFLECTIONS                (-10000)
  275. #define EAXLISTENER_MAXREFLECTIONS                1000
  276. #define EAXLISTENER_DEFAULTREFLECTIONS            (-2602)
  277.  
  278. #define EAXLISTENER_MINREFLECTIONSDELAY           0.0f
  279. #define EAXLISTENER_MAXREFLECTIONSDELAY           0.3f
  280. #define EAXLISTENER_DEFAULTREFLECTIONSDELAY       0.007f
  281.  
  282. #define EAXLISTENER_MINREVERB                     (-10000)
  283. #define EAXLISTENER_MAXREVERB                     2000
  284. #define EAXLISTENER_DEFAULTREVERB                 200
  285.  
  286. #define EAXLISTENER_MINREVERBDELAY                0.0f
  287. #define EAXLISTENER_MAXREVERBDELAY                0.1f
  288. #define EAXLISTENER_DEFAULTREVERBDELAY            0.011f
  289.  
  290. #define EAXLISTENER_MINECHOTIME                   0.075f
  291. #define EAXLISTENER_MAXECHOTIME                      0.25f
  292. #define EAXLISTENER_DEFAULTECHOTIME               0.25f
  293.  
  294. #define EAXLISTENER_MINECHODEPTH                  0.0f
  295. #define EAXLISTENER_MAXECHODEPTH                  1.0f
  296. #define EAXLISTENER_DEFAULTECHODEPTH              0.0f
  297.  
  298. #define EAXLISTENER_MINMODULATIONTIME             0.04f
  299. #define EAXLISTENER_MAXMODULATIONTIME             4.0f
  300. #define EAXLISTENER_DEFAULTMODULATIONTIME         0.25f
  301.  
  302. #define EAXLISTENER_MINMODULATIONDEPTH            0.0f
  303. #define EAXLISTENER_MAXMODULATIONDEPTH            1.0f
  304. #define EAXLISTENER_DEFAULTMODULATIONDEPTH        0.0f
  305.  
  306. #define EAXLISTENER_MINAIRABSORPTIONHF            (-100.0f)
  307. #define EAXLISTENER_MAXAIRABSORPTIONHF            0.0f
  308. #define EAXLISTENER_DEFAULTAIRABSORPTIONHF        (-5.0f)
  309.  
  310. #define EAXLISTENER_MINHFREFERENCE                1000.0f
  311. #define EAXLISTENER_MAXHFREFERENCE                20000.0f
  312. #define EAXLISTENER_DEFAULTHFREFERENCE            5000.0f
  313.  
  314. #define EAXLISTENER_MINLFREFERENCE                20.0f
  315. #define EAXLISTENER_MAXLFREFERENCE                1000.0f
  316. #define EAXLISTENER_DEFAULTLFREFERENCE            250.0f
  317.  
  318. #define EAXLISTENER_MINROOMROLLOFFFACTOR          0.0f
  319. #define EAXLISTENER_MAXROOMROLLOFFFACTOR          10.0f
  320. #define EAXLISTENER_DEFAULTROOMROLLOFFFACTOR      0.0f
  321.  
  322. #define EAXLISTENER_DEFAULTFLAGS                  (EAXLISTENERFLAGS_DECAYTIMESCALE |        \
  323.                                                    EAXLISTENERFLAGS_REFLECTIONSSCALE |      \
  324.                                                    EAXLISTENERFLAGS_REFLECTIONSDELAYSCALE | \
  325.                                                    EAXLISTENERFLAGS_REVERBSCALE |           \
  326.                                                    EAXLISTENERFLAGS_REVERBDELAYSCALE |      \
  327.                                                    EAXLISTENERFLAGS_DECAYHFLIMIT)
  328.  
  329.  
  330.  
  331. /*
  332. * EAX 3.0 buffer property set {A8FA6881-B476-11d3-BDB9-00C0F02DDF87}
  333. */
  334. DEFINE_GUID(DSPROPSETID_EAX30_BufferProperties, 
  335.     0xa8fa6881, 
  336.     0xb476, 
  337.     0x11d3, 
  338.     0xbd, 0xb9, 0x0, 0xc0, 0xf0, 0x2d, 0xdf, 0x87);
  339.  
  340. // For compatibility with future EAX versions:
  341. #define DSPROPSETID_EAX_BufferProperties DSPROPSETID_EAX30_BufferProperties
  342. #define DSPROPSETID_EAX_SourceProperties DSPROPSETID_EAX30_BufferProperties
  343.  
  344. typedef enum
  345. {
  346.     DSPROPERTY_EAXBUFFER_NONE,
  347.     DSPROPERTY_EAXBUFFER_ALLPARAMETERS,
  348.     DSPROPERTY_EAXBUFFER_OBSTRUCTIONPARAMETERS,
  349.     DSPROPERTY_EAXBUFFER_OCCLUSIONPARAMETERS,
  350.     DSPROPERTY_EAXBUFFER_EXCLUSIONPARAMETERS,
  351.     DSPROPERTY_EAXBUFFER_DIRECT,
  352.     DSPROPERTY_EAXBUFFER_DIRECTHF,
  353.     DSPROPERTY_EAXBUFFER_ROOM,
  354.     DSPROPERTY_EAXBUFFER_ROOMHF,
  355.     DSPROPERTY_EAXBUFFER_OBSTRUCTION,
  356.     DSPROPERTY_EAXBUFFER_OBSTRUCTIONLFRATIO,
  357.     DSPROPERTY_EAXBUFFER_OCCLUSION, 
  358.     DSPROPERTY_EAXBUFFER_OCCLUSIONLFRATIO,
  359.     DSPROPERTY_EAXBUFFER_OCCLUSIONROOMRATIO,
  360.     DSPROPERTY_EAXBUFFER_OCCLUSIONDIRECTRATIO,
  361.     DSPROPERTY_EAXBUFFER_EXCLUSION, 
  362.     DSPROPERTY_EAXBUFFER_EXCLUSIONLFRATIO,
  363.     DSPROPERTY_EAXBUFFER_OUTSIDEVOLUMEHF, 
  364.     DSPROPERTY_EAXBUFFER_DOPPLERFACTOR, 
  365.     DSPROPERTY_EAXBUFFER_ROLLOFFFACTOR, 
  366.     DSPROPERTY_EAXBUFFER_ROOMROLLOFFFACTOR,
  367.     DSPROPERTY_EAXBUFFER_AIRABSORPTIONFACTOR,
  368.     DSPROPERTY_EAXBUFFER_FLAGS
  369. } DSPROPERTY_EAX_BUFFERPROPERTY;    
  370.  
  371. // OR these flags with property id
  372. #define DSPROPERTY_EAXBUFFER_IMMEDIATE 0x00000000 // changes take effect immediately
  373. #define DSPROPERTY_EAXBUFFER_DEFERRED  0x80000000 // changes take effect later
  374. #define DSPROPERTY_EAXBUFFER_COMMITDEFERREDSETTINGS (DSPROPERTY_EAXBUFFER_NONE | \
  375.                                                      DSPROPERTY_EAXBUFFER_IMMEDIATE)
  376.  
  377. // Use this structure for DSPROPERTY_EAXBUFFER_ALLPARAMETERS
  378. // - all levels are hundredths of decibels
  379. // - all delays are in seconds
  380. //
  381. // NOTE: This structure may change in future EAX versions.
  382. //       It is recommended to initialize fields by name:
  383. //              myBuffer.lDirect = 0;
  384. //              myBuffer.lDirectHF = -200;
  385. //              ...
  386. //              myBuffer.dwFlags = myFlags /* see EAXBUFFERFLAGS below */ ;
  387. //       instead of:
  388. //              myBuffer = { 0, -200, ... , 0x00000003 };
  389. //
  390. typedef struct _EAXBUFFERPROPERTIES
  391. {
  392.     long lDirect;                 // direct path level (at low and mid frequencies)
  393.     long lDirectHF;               // relative direct path level at high frequencies
  394.     long lRoom;                   // room effect level (at low and mid frequencies)
  395.     long lRoomHF;                 // relative room effect level at high frequencies
  396.     long lObstruction;            // main obstruction control (attenuation at high frequencies) 
  397.     float flObstructionLFRatio;   // obstruction low-frequency level re. main control
  398.     long lOcclusion;              // main occlusion control (attenuation at high frequencies)
  399.     float flOcclusionLFRatio;     // occlusion low-frequency level re. main control
  400.     float flOcclusionRoomRatio;   // relative occlusion control for room effect
  401.     float flOcclusionDirectRatio; // relative occlusion control for direct path
  402.     long lExclusion;              // main exlusion control (attenuation at high frequencies)
  403.     float flExclusionLFRatio;     // exclusion low-frequency level re. main control
  404.     long lOutsideVolumeHF;        // outside sound cone level at high frequencies
  405.     float flDopplerFactor;        // like DS3D flDopplerFactor but per source
  406.     float flRolloffFactor;        // like DS3D flRolloffFactor but per source
  407.     float flRoomRolloffFactor;    // like DS3D flRolloffFactor but for room effect
  408.     float flAirAbsorptionFactor;  // multiplies DSPROPERTY_EAXLISTENER_AIRABSORPTIONHF
  409.     unsigned long ulFlags;        // modifies the behavior of properties
  410. } EAXBUFFERPROPERTIES, *LPEAXBUFFERPROPERTIES;
  411.  
  412. // Use this structure for DSPROPERTY_EAXBUFFER_OBSTRUCTION,
  413. typedef struct _EAXOBSTRUCTIONPROPERTIES
  414. {
  415.     long lObstruction;
  416.     float flObstructionLFRatio;
  417. } EAXOBSTRUCTIONPROPERTIES, *LPEAXOBSTRUCTIONPROPERTIES;
  418.  
  419. // Use this structure for DSPROPERTY_EAXBUFFER_OCCLUSION
  420. typedef struct _EAXOCCLUSIONPROPERTIES
  421. {
  422.     long lOcclusion;
  423.     float flOcclusionLFRatio;
  424.     float flOcclusionRoomRatio;
  425.     float flOcclusionDirectRatio;
  426. } EAXOCCLUSIONPROPERTIES, *LPEAXOCCLUSIONPROPERTIES;
  427.  
  428. // Use this structure for DSPROPERTY_EAXBUFFER_EXCLUSION
  429. typedef struct _EAXEXCLUSIONPROPERTIES
  430. {
  431.     long lExclusion;
  432.     float flExclusionLFRatio;
  433. } EAXEXCLUSIONPROPERTIES, *LPEAXEXCLUSIONPROPERTIES;
  434.  
  435. // Used by DSPROPERTY_EAXBUFFER_FLAGS
  436. //    TRUE:    value is computed automatically - property is an offset
  437. //    FALSE:   value is used directly
  438. //
  439. // Note: The number and order of flags may change in future EAX versions.
  440. //       To insure future compatibility, use flag defines as follows:
  441. //              myFlags = EAXBUFFERFLAGS_DIRECTHFAUTO | EAXBUFFERFLAGS_ROOMAUTO;
  442. //       instead of:
  443. //              myFlags = 0x00000003;
  444. //
  445. #define EAXBUFFERFLAGS_DIRECTHFAUTO          0x00000001 // affects DSPROPERTY_EAXBUFFER_DIRECTHF
  446. #define EAXBUFFERFLAGS_ROOMAUTO              0x00000002 // affects DSPROPERTY_EAXBUFFER_ROOM
  447. #define EAXBUFFERFLAGS_ROOMHFAUTO            0x00000004 // affects DSPROPERTY_EAXBUFFER_ROOMHF
  448.  
  449. #define EAXBUFFERFLAGS_RESERVED              0xFFFFFFF8 // reserved future use
  450.  
  451. // Property ranges and defaults:
  452.  
  453. #define EAXBUFFER_MINDIRECT                    (-10000)
  454. #define EAXBUFFER_MAXDIRECT                    1000
  455. #define EAXBUFFER_DEFAULTDIRECT                0
  456.  
  457. #define EAXBUFFER_MINDIRECTHF                  (-10000)
  458. #define EAXBUFFER_MAXDIRECTHF                  0
  459. #define EAXBUFFER_DEFAULTDIRECTHF              0
  460.  
  461. #define EAXBUFFER_MINROOM                      (-10000)
  462. #define EAXBUFFER_MAXROOM                      1000
  463. #define EAXBUFFER_DEFAULTROOM                  0
  464.  
  465. #define EAXBUFFER_MINROOMHF                    (-10000)
  466. #define EAXBUFFER_MAXROOMHF                    0
  467. #define EAXBUFFER_DEFAULTROOMHF                0
  468.  
  469. #define EAXBUFFER_MINOBSTRUCTION               (-10000)
  470. #define EAXBUFFER_MAXOBSTRUCTION               0
  471. #define EAXBUFFER_DEFAULTOBSTRUCTION           0
  472.  
  473. #define EAXBUFFER_MINOBSTRUCTIONLFRATIO        0.0f
  474. #define EAXBUFFER_MAXOBSTRUCTIONLFRATIO        1.0f
  475. #define EAXBUFFER_DEFAULTOBSTRUCTIONLFRATIO    0.0f
  476.  
  477. #define EAXBUFFER_MINOCCLUSION                 (-10000)
  478. #define EAXBUFFER_MAXOCCLUSION                 0
  479. #define EAXBUFFER_DEFAULTOCCLUSION             0
  480.  
  481. #define EAXBUFFER_MINOCCLUSIONLFRATIO          0.0f
  482. #define EAXBUFFER_MAXOCCLUSIONLFRATIO          1.0f
  483. #define EAXBUFFER_DEFAULTOCCLUSIONLFRATIO      0.25f
  484.  
  485. #define EAXBUFFER_MINOCCLUSIONROOMRATIO        0.0f
  486. #define EAXBUFFER_MAXOCCLUSIONROOMRATIO        10.0f
  487. #define EAXBUFFER_DEFAULTOCCLUSIONROOMRATIO    1.5f
  488.  
  489. #define EAXBUFFER_MINOCCLUSIONDIRECTRATIO      0.0f
  490. #define EAXBUFFER_MAXOCCLUSIONDIRECTRATIO      10.0f
  491. #define EAXBUFFER_DEFAULTOCCLUSIONDIRECTRATIO  1.0f
  492.  
  493. #define EAXBUFFER_MINEXCLUSION                 (-10000)
  494. #define EAXBUFFER_MAXEXCLUSION                 0
  495. #define EAXBUFFER_DEFAULTEXCLUSION             0
  496.  
  497. #define EAXBUFFER_MINEXCLUSIONLFRATIO          0.0f
  498. #define EAXBUFFER_MAXEXCLUSIONLFRATIO          1.0f
  499. #define EAXBUFFER_DEFAULTEXCLUSIONLFRATIO      1.0f
  500.  
  501. #define EAXBUFFER_MINOUTSIDEVOLUMEHF           (-10000)
  502. #define EAXBUFFER_MAXOUTSIDEVOLUMEHF           0
  503. #define EAXBUFFER_DEFAULTOUTSIDEVOLUMEHF       0
  504.  
  505. #define EAXBUFFER_MINDOPPLERFACTOR             0.0f
  506. #define EAXBUFFER_MAXDOPPLERFACTOR             10.f
  507. #define EAXBUFFER_DEFAULTDOPPLERFACTOR         0.0f
  508.  
  509. #define EAXBUFFER_MINROLLOFFFACTOR             0.0f
  510. #define EAXBUFFER_MAXROLLOFFFACTOR             10.f
  511. #define EAXBUFFER_DEFAULTROLLOFFFACTOR         0.0f
  512.  
  513. #define EAXBUFFER_MINROOMROLLOFFFACTOR         0.0f
  514. #define EAXBUFFER_MAXROOMROLLOFFFACTOR         10.f
  515. #define EAXBUFFER_DEFAULTROOMROLLOFFFACTOR     0.0f
  516.  
  517. #define EAXBUFFER_MINAIRABSORPTIONFACTOR       0.0f
  518. #define EAXBUFFER_MAXAIRABSORPTIONFACTOR       10.0f
  519. #define EAXBUFFER_DEFAULTAIRABSORPTIONFACTOR   1.0f
  520.  
  521. #define EAXBUFFER_DEFAULTFLAGS                 (EAXBUFFERFLAGS_DIRECTHFAUTO |       \
  522.                                                 EAXBUFFERFLAGS_ROOMAUTO |           \
  523.                                                 EAXBUFFERFLAGS_ROOMHFAUTO )
  524.  
  525. #pragma pack(pop)
  526.  
  527. #ifdef __cplusplus
  528. }
  529. #endif // __cplusplus
  530.  
  531. #endif
  532.